package com.highspeed.bdk.gateway.socket.analyze.message.gui.resolver;

import com.highspeed.bdk.gateway.Util;
import com.highspeed.bdk.gateway.socket.analyze.message.gui.base.MessageResolver;

import java.util.Map;

/**
 * 3.20反馈逻辑端口反馈统计信息定义
 */
public class LogPortStaticsResolver extends MessageResolver {

    @Override
    protected Map doResolveBody(byte[] response) {
        /* 起始端口统计信息*/
        /* 发送的数据总数,包含ACK报文和数据报文头部*/
        long nDataSend = Util.getLong(response, getOffset());
        offset8();
        logger.info("起始端口统计信息.........." + nDataSend);

        /*发送的纯应用数据长度*/
        long nPureDataSend = Util.getLong(response, getOffset());
        offset8();
        logger.info("发送的纯应用数据长度.........." + nPureDataSend);

        /* 接收的数据总数，包含ACK报文和数据报文头部*/
        long nDataReceive = Util.getLong(response, getOffset());
        offset8();
        logger.info("接收的数据总数，包含ACK报文和数据报文头部.........." + nDataReceive);

        /*接收到的纯应用数据长度*/
        long nPureDataReceive = Util.getLong(response, getOffset());
        offset8();
        logger.info("接收到的纯应用数据长度.........." + nPureDataReceive);

        /*端口状态*/
        int nPortStatus = Util.getInt(response, getOffset());
        offset4();
        logger.info("端口状态.........." + nPortStatus);

        /*进入发送队列的报文数量*/
        int nEnterSendAlignCnt = Util.getInt(response, getOffset());
        offset4();
        logger.info("进入发送队列的报文数量.........." + nEnterSendAlignCnt);

        /*从发送队列中取出的报文数量*/
        int nOutSendAlignCnt = Util.getInt(response, getOffset());
        offset4();
        logger.info("从发送队列中取出的报文数量.........." + nOutSendAlignCnt);

        /*一个连接的发送队列中允许的最大的未发送报文数*/
        int nMaxSendAlignLength = Util.getInt(response, getOffset());
        offset4();
        logger.info("一个连接的发送队列中允许的最大的未发送报文数.........." + nMaxSendAlignLength);

        /*允许发送的报文的数量*/
        int nAllowSendCnt = Util.getInt(response, getOffset());
        offset4();
        logger.info("允许发送的报文的数量.........." + nAllowSendCnt);

        /*进入接收队列的报文数量*/
        int nEnterRecvAlignCnt = Util.getInt(response, getOffset());
        offset4();
        logger.info("进入接收队列的报文数量.........." + nEnterRecvAlignCnt);

        /*从接收队列中取出的报文数量*/
        int nOutRecvAlignCnt = Util.getInt(response, getOffset());
        offset4();
        logger.info("从接收队列中取出的报文数量.........." + nOutRecvAlignCnt);

        /*一个连接的接收队列中允许的最大的报文数*/
        int nMaxRecvAlignLength = Util.getInt(response, getOffset());
        offset4();
        logger.info("一个连接的接收队列中允许的最大的报文数.........." + nMaxRecvAlignLength);

        int nEntRecvCntAfterSendAck = Util.getInt(response, getOffset());
        offset4();
        logger.info("nEntRecvCntAfterSendAck.........." + nEntRecvCntAfterSendAck);

        int nOutRecvCntAfterSendAck = Util.getInt(response, getOffset());
        offset4();
        logger.info("nOutRecvCntAfterSendAck.........." + nOutRecvCntAfterSendAck);

        return getContainer();
    }
}
